var moduleName = ''; //模块名
var obj = {};       //对象主要记录id 防冲突
var myKey = '';    //key

$(document).ready(function () {
    $('#content').tabs({
        onSelect: function (title, index) {
            myKey = title;
        }
    });
});

//初始化桌面，默认为grid列表界面
function initDeskTop() {
    $('#' + obj[myKey] + 'dataGrid').parents('.parent').show(100);
    $('#' + obj[myKey] + 'dataGrid').parents('.parent').siblings('.parent').each(function () {
        $(this).hide(100);
    });
}

//跳转到input界面 包括编辑 和新增界面 和查看界面
function toInput() {
    $('#' + obj[myKey] + 'sideDiv').siblings('.parent').each(function () {
        $(this).hide(100);
    });
    $('#' + obj[myKey] + 'sideDiv').show();
}
//返回按钮
function back() {
    initDeskTop();
}
//先固定
function generatorForm(data) {
    if ($('#' + obj[myKey] + 'formTable').length == 0) {
        var table = $('<table id=\"' + obj[myKey] + 'formTable' + '\"></table>');
        if ($.isArray(data)) {
            $.each(data, function (index, value) {
                var tr = $('<tr></tr>');
                var tdProperty = $('<td>' + value + '</td>');
                var valueProperty = $('<td></td>');
                var formElement = $('<input />');
                appendFormAttr(formElement, value);
                tr.append(tdProperty).append(valueProperty.append(formElement));
                table.append(tr);
            });
        } else {
            //edit
            $.each(data, function (key, value) {
                if (key != 'id') {
                    var tr = $('<tr></tr>');
                    var tdProperty = $('<td>' + key + '</td>');
                    var valueProperty = $('<td></td>');
                    var formElement = $('<input />');
                    appendFormAttr(formElement, key);
                    tr.append(tdProperty).append(valueProperty.append(formElement));
                    table.append(tr);

                }
            })
        }
        $('#' + obj[myKey] + 'formData').append(table);
    }
}

//动态增加属性
function appendFormAttr(formElement, property) {
    formElement.attr('type', 'text').attr('name', property);
//	formElement.addClass('easyui-validatebox');
}

/**
 * dynamic generation select options
 */
function generatorSelectOptions(data, formElementId) {
    $.each(data, function (index, value) {
        var option = $('<option value=\"' + value + '\">' + value + '</option>');
        $('#' + formElementId).append(option);
    });
}

//重置表单
function resetForm(dataFormId) {
//    $('#formData').form('clear');
    dataFormId = dealDefault(dataFormId, obj[myKey] + 'formData')
    $('#' + dataFormId).form('clear');
}


function resetSearchForm(dataFormId) {
    dataFormId = dealDefault(dataFormId, obj[myKey] + 'advanceSearchForm')
    $('#' + dataFormId).form('clear');
}
/**
 *刷新DataGrid列表(适用于Jquery Easy Ui中的dataGrid)
 *注：建议采用此方法来刷新DataGrid列表数据(也即重新加载数据)，不建议直接使用语句
 *$('#dataTableId').datagrid('reload');来刷新列表数据，因为采用后者，如果日后
 *在修改项目时，要在系统中的所有刷新处进行其他一些操作，那么你将要修改系统中所有涉及刷新
 *的代码，这个工作量非常大，而且容易遗漏；但是如果使用本方法来刷新列表，那么对于这种修
 *该需求将很容易做到，而去不会出错，不遗漏。
 *
 *@paramdataTableId将要刷新数据的DataGrid依赖的table列表id
 */
function refreshGrid(dataTableId) {
//    $('#dataGrid').datagrid('reload');
    dataTableId = dealDefault(dataTableId, obj[myKey] + 'dataGrid');

    $('#' + dataTableId).datagrid('reload');
}
function submitForm(url) {
    var url = dealDefault(url, obj[myKey] + '/saveOrUpdate.do');
    $('#' + obj[myKey] + 'formData').form('submit', {
        url: applicationContextPath + url,
        onSubmit: function (param) {
            var isValid = $(this).form('validate');
            if (!isValid) {
                $.messager.progress('close');	// hide progress bar while the form is invalid
            }
            return isValid;
        },
        success: function () {
            initDeskTop();
            refreshGrid();
            clearSelect();
        }
    })
}


/**
 *关闭Jquery EasyUi的弹出窗口(适用于Jquery Easy Ui)
 *
 *@paramdialogId将要关闭窗口的id
 */
function closeDialog(dialogId) {
    dialogId = dealDefault(dialogId, obj[myKey] + 'dialog')
    $('#' + dialogId).dialog('close');
}


/**
 *自适应表格的宽度处理(适用于Jquery Easy Ui中的dataGrid的列宽),
 *注：可以实现列表的各列宽度跟着浏览宽度的变化而变化，即采用该方法来设置DataGrid
 *的列宽可以在不同分辨率的浏览器下自动伸缩从而满足不同分辨率浏览器的要求
 *使用方法：(如:{field:'ymName',title:'编号',width:fillsize(0.08),align:'center'},)
 *
 *@param percent当前列的列宽所占整个窗口宽度的百分比(以小数形式出现，如0.3代表30%)
 *
 *@return 通过当前窗口和对应的百分比计算出来的具体宽度
 */
function fillsize(percent) {
    var bodyWidth = document.body.clientWidth;
    return (bodyWidth - 90) * percent;
}

/**
 * 获取所选记录行(单选)
 *
 * @paramdataTableId目标记录所在的DataGrid列表的table的id
 * @paramerrorMessage 如果没有选择一行(即没有选择或选择了多行)的提示信息
 *
 * @return 所选记录行对象，如果返回值为null,或者"null"(有时浏览器将null转换成了字符串"null")说明没有
 *选择一行记录。
 */
function getSingleSelectRow(dataTableId, errorMessage) {
    var rows = $('#' + obj[myKey] + dataTableId).datagrid('getSelections');
    var num = rows.length;
    if (num == 1) {
        return rows[0];
    } else {
        $.messager.alert('提示消息', errorMessage, 'info');
        return null;
    }
}

/**
 * 在DataGrid中获取所选记录的id,多个id用逗号分隔
 * 注：该方法使用的前提是：DataGrid的idField属性对应到列表Json数据中的字段名必须为id
 * @paramdataTableId目标记录所在的DataGrid列表table的id
 *
 * @return 所选记录的id字符串(多个id用逗号隔开)
 */
function getSelectIds(dataTableId, noOneSelectMessage) {
    dataTableId = dealDefault(dataTableId, obj[myKey] + 'dataGrid')
    noOneSelectMessage = dealDefault(noOneSelectMessage, '请选择一条记录');
    var rows = $('#' + dataTableId).datagrid('getSelections');
    var num = rows.length;
    var ids = null;
    if (num < 1) {
        if (null != noOneSelectMessage)
            $.messager.alert('提示消息', noOneSelectMessage, 'info');
        return null;
    } else {
        for (var i = 0; i < num; i++) {
            if (null == ids || i == 0) {
                ids = rows[i].id;
            } else {
                ids = ids + "," + rows[i].id;
            }
        }
        return ids;
    }
}

/**
 *取消DataGrid中的行选择(适用于Jquery Easy Ui中的dataGrid)
 *注意：解决了无法取消"全选checkbox"的选择,不过，前提是必须将列表展示
 *数据的DataGrid所依赖的Table放入html文档的最全面，至少该table前没有
 *其他checkbox组件。
 *
 *@paramdataTableId将要取消所选数据记录的目标table列表id
 */
function clearSelect(dataTableId) {
    dataTableId = dealDefault(dataTableId, obj[myKey] + 'dataGrid')
    $('#' + dataTableId).datagrid('clearSelections');
    //取消选择DataGrid中的全选
    $("input[type='checkbox']").eq(0).attr("checked", false);
}

/**
 * 暂时没有用到
 *删除所选记录(适用于Jquery Easy Ui中的dataGrid)(删除的依据字段是id)
 *注：该方法会自动将所选记录的id(DataGrid的idField属性对应到列表Json数据中的字段名必须为id)
 *动态组装成字符串，多个id使用逗号隔开(如：1,2,3,8,10)，然后存放入变量ids中传入后台，后台
 *可以使用该参数名从request对象中获取所有id值字符串，此时在组装sql或者hql语句时可以采用in
 *关键字来处理，简介方便。
 *另外，后台代码必须在操作完之后以ajax的形式返回Json格式的提示信息，提示的json格式信息中必须有一个
 *message字段，存放本次删除操作成功与失败等一些提示操作用户的信息。
 *
 *@paramdataTableId 将要删除记录所在的列表table的id
 *@paramrequest URL与后台服务器进行交互，进行具体删除操作的请求路径
 *@paramconfirmMessage  删除确认信息
 */



function deleteNodeById(dataTableId, requestURL, confirmMessage) {
    if (null == confirmMessage || typeof(confirmMessage) == "undefined" || "" == confirmMessage) {
        confirmMessage = "确定删除所选记录?";
    }
    var rows = $('#' + dataTableId).datagrid('getSelections');
    var num = rows.length;
    var ids = null;
    if (num < 1) {
        $.messager.alert('提示消息', '请选择你要删除的记录!', 'info');
    } else {
        $.messager.confirm('确认', confirmMessage, function (r) {
            if (r) {
                for (var i = 0; i < num; i++) {
                    if (null == ids || i == 0) {
                        ids = rows[i].id;
                    } else {
                        ids = ids + "," + rows[i].id;
                    }
                }
                $.getJSON(requestURL, {"ids": ids}, function (data) {
                    if (null != data && null != data.message && "" != data.message) {
                        $.messager.alert('提示消息', data.message, 'info');
                        flashTable(dataTableId);
                    } else {
                        $.messager.alert('提示消息', '删除失败！', 'warning');
                    }
                    clearSelect(dataTableId);
                });
            }
        });
    }
}
/**
 * 替换变量的公共方法
 * @param newParam
 * @param defaultParam
 * @return {*}
 */
function dealDefault(newParam, defaultParam) {
    if (newParam == undefined) {
        return defaultParam;
    }
    return newParam;
}

/**
 * 字符串转化为对象
 * @param data
 */
function jsonToObject(data) {
    var json = stringToJson(data);
    data = jQuery.parseJSON(json);
    return data;
}

/**
 * string to json
 * @param data
 * @return {string}
 */
function stringToJson(data) {
    var json = '';
    var fields = stringToArray(data);
    json += '{'
    for (o in fields) {
        json = json + '\"' + fields[o] + '\":\"' + o + '\",';
    }
    json = json.substring(0, json.length - 1);
    json += '}';
    return json;
}

/**
 * string to array
 * @param data
 * @return {{}}
 */
function stringToArray(data) {
    var fields = {};
    fields = data.split(',');
    return fields;
}

/**
 * ajax的公共方法
 * @param params
 */
function ajax(params) {
    $.ajax({
        url: applicationContextPath + params.url,
        data: dealDefault(params.data, {}),
        datatype: dealDefault(params.datatype, 'json'),
        type: "post",
        async: true,
        success: function (data) {//成功后回调
            params.dealAjaxBack(data);
        },
        error: function (e) {//失败后回调
            //alert(e);
        },
        beforeSend: function () { //发送请求前调用，可以放一些"正在加载"之类额话
            //alert("正在加载");
        }
    })
}

/**
 * form begin
 */
//格式化日期

/**
 * form end
 */


//用于组织界面
function show() {
    $("#loading").fadeOut("normal", function () {
        $(this).remove();
    });
}
var delayTime;
$.parser.onComplete = function () {
    if (delayTime)
        clearTimeout(delayTime);
    delayTime = setTimeout(show, 100);
    initDeskTop();
}

//添加面板
function addTab(title, url) {
    if ($('#content').tabs('exists', title)) {
        $('#content').tabs('select', title);
        myKey = title;
    } else {
        moduleName = url.replace('/index.do', '');
        obj[title] = moduleName;
        myKey = title;
        $('#content').tabs('add', {
                title: title,
                href: applicationContextPath + url,
                closable: true
            }
        );
        initDeskTop();
    }
}


